package com.atguigu.bigdata.scala.chapter07

object Scala06_Collection_Tuple {

    def main(args: Array[String]): Unit = {

        // TODO 集合 - Tuple

        // 数据： 1, zhangsan, 30
        // 想将上面的3个数据当成整体来使用，需要封装，那我们封装成什么呢？
        // 1. 实体类：User
//        val user = new User()
//        user.id = 1
//        user.name = "zhangsan"
//        user.age = 30
        // 2. 集合 : List
        // 一般情况下，使用List集合用于封装相同类型, 相同含义的数据
        // zhangsan, lisi,wangwu, zhaoliu
        // User, User,User, User
        //val list = List(1, "zhangsan", 30)

        // 3. scala为了能将无关的数据当成整体使用，那么采用一种特殊的结构（集合），将无关的元素组合在一起。
        //    这种结构（集合），称之为Tuple(元组)
        //    Tuple声明非常简单，主要将数据用小括号包含起来就可以
        val t = (1, "zhangsan", 30, "xxxx")

        // 因为数据之间没有关系，所以想要访问数据，只能通过存放顺序，这里是顺序号
        //println(t._1)
        //println(t._2)
        //println(t._3)
        //println(t)

        // 对元组进行遍历
//        val iterator: Iterator[Any] = t.productIterator
//        while ( iterator.hasNext ) {
//            println(iterator.next())
//        }

        // 通过顺序号对元组中的数据进行访问
        // 顺序号和元素的个数有关
        // 元组中的元素最多能有多少个？ 22个
        // 这里的元组只限定元素的个数，没有限定元素的类型
        println(t._3)
        println(t._4)

        //val t1 : Tuple22[String] = (1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2)
        // 函数作为对象给其他使用时，参数不能超过22个，因为函数类型最多只有22 : Function22
        // 元组的元素之所以也是22个，因为元组类型最多也是22
        //  元组类型有两种声明方式：
        // 1. Tuple2[String, Int]
        val t2 : Tuple2[String, Int] = ("zhangsan", 30)
        // 2. (String, Int)
        val t3 : (String, Int) = ("zhangsan", 40)

        //println(t1)






    }
    class User {
        var id : Int = _
        var name : String = _
        var age : Int = _
    }
}
